{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Tutorial III: Low rank, arbitrary basis molecular simulations"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Important note about origins of this method\n",
    "\n",
    "What follows in this tutorial is currently unpublished. It will be described in detail in an upcoming paper by (alphabetical) Ryan Babbush, Garnet Kin-Lic Chan, Jarrod McClean, Austin Minnich, Mario Motta, and Erika Ye."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Low rank decomposition of the Coulomb operator\n",
    "\n",
    "In Tutorial I we discussed methods for very compiling single-particle basis transformations of fermionic operators in $O(N)$ depth on a linearly connected architecture. We looked at the particular example of simulating a free fermion model by using Bogoliubov transformations to diagonalize the model.\n",
    "\n",
    "In Tutorial II we discussed methods for compiling Trotter steps of electronic structure Hamiltonian in $O(N)$ depth on a linearly connected architecture when expressed in a basis diagonalizing the Coulomb operator so that\n",
    "$$\n",
    "H = \\sum_{pq} T_{pq} a^\\dagger_p a_q + \\sum_{pq} V_{pq} a^\\dagger_p a_p a^\\dagger_q a_q.\n",
    "$$\n",
    "\n",
    "Here we will discuss how both of those techniques can be combined, along with some insights from electronic structure, in order to simulate arbitrary basis molecular Hamiltonians taking the form\n",
    "$$\n",
    "H = \\sum_{pq} T_{pq} a^\\dagger_p a_q + \\sum_{pqrs} V_{pqrs} a^\\dagger_p a_q a^\\dagger_r a_s\n",
    "$$\n",
    "in depth scaling only as $O(N^2)$ on a linear array of qubits. First, we note that the one-body part of the above expression is easy to simulate using the techniques introduced in Tutorial I. Thus, the real challenge is to simulate the two-body part of the operator.\n",
    "\n",
    "We begin with the observation that the rank-4 tensor $V$, with the values $V_{pqrs}$ representing the coefficient of $a^\\dagger_p a_q a^\\dagger_r a_s$ can be flattened into an $N^2 \\times N^2$ array by making $p,q$ one index and $r,s$ the other. This is the electronic repulsion integral (ERI) matrix in chemist notation. We will refer to the ERI matrix as $W$. By diagonalizing $W$, one obtains $W g_\\ell = \\lambda_\\ell g_\\ell$ where the eigenvector $g_\\ell$ is a vector of dimension $N^2$. If we reshape $g_\\ell$ into an $N \\times N$ vector, we realize that\n",
    "$$\n",
    "\\sum_{pqrs} V_{pqrs} a^\\dagger_p a_q a^\\dagger_r a_s = \\sum_{\\ell=0}^{L-1} \\lambda_\\ell \\left(\\sum_{pq} \\left[g_{\\ell}\\right]_{pq} a^\\dagger_p a_q\\right)^2.\n",
    "$$\n",
    "This is related to the concept of density fitting in electronic structure, which is often accomplished using a Cholesky decomposition. It is fairly well known in the quantum chemistry community that the ERI matrix is positive semi-definite and despite having linear dimension $N^2$, has rank of only $L = O(N)$. Thus, the eigenvalues $\\lambda_\\ell$ are positive and there are only $O(N)$ of them.\n",
    "\n",
    "Next, we diagonalize the one-body operators inside of the square so that\n",
    "$$\n",
    "R_\\ell \\left(\\sum_{pq} \\left[g_\\ell\\right]_{pq} a^\\dagger_p a_q\\right) R_\\ell^\\dagger = \\sum_{p} f_{\\ell p} a^\\dagger_p a_p\n",
    "$$\n",
    "where the $R_\\ell$ represent single-particle basis transformations of the sort we compiled in Tutorial I. Then,\n",
    "$$\n",
    "\\sum_{\\ell=0}^{L-1} \\lambda_\\ell \\left(\\sum_{pq} \\left[g_{\\ell}\\right]_{pq} a^\\dagger_p a_q\\right)^2 =\n",
    "\\sum_{\\ell=0}^{L-1} \\lambda_\\ell \\left(R_\\ell \\left(\\sum_{p} f_{\\ell p} a^\\dagger_p a_p\\right) R_\\ell^\\dagger\\right)^2 = \\sum_{\\ell=0}^{L-1} \\lambda_\\ell \\left(R_\\ell \\left(\\sum_{p} f_{\\ell p} a^\\dagger_p a_p\\right) R_\\ell^\\dagger R_\\ell \\left(\\sum_{p} f_{\\ell p} a^\\dagger_p a_p\\right) R_\\ell^\\dagger\\right)\n",
    "= \\sum_{\\ell=0}^{L-1} \\lambda_\\ell R_\\ell \\left(\\sum_{pq} f_{\\ell p} f_{\\ell q} a^\\dagger_p a_p a^\\dagger_q a_q\\right) R_\\ell^\\dagger.\n",
    "$$\n",
    "We now see that we can simulate a Trotter step under the arbitrary basis two-body operator as\n",
    "$$\n",
    "\\prod_{\\ell=0}^{L-1} R_\\ell \\exp\\left(-i\\sum_{pq} f_{\\ell p} f_{\\ell q} a^\\dagger_p a_p a^\\dagger_q a_q\\right) R_\\ell^\\dagger\n",
    "$$\n",
    "where we note that the operator in the exponential take the form of a diagonal Coulomb operator. Since we can implement the $R_\\ell$ circuits in $O(N)$ depth (see Tutorial I) and we can implement Trotter steps under diagonal Coulomb operators in $O(N)$ layers of gates (see Tutorial II) we see that we can implement Trotter steps under arbitrary basis electronic structure Hamiltionians in $O(L N) = O(N^2)$ depth, and all on a linearly connected device. This is a big improvement over the usual way of doing things, which would lead to no less than $O(N^5)$ depth! In fact, it is also possible to do better by truncating rank on the second diagonalization but we have not implemented that (details will be discussed in aforementioned paper-in-preparation).\n",
    "\n",
    "Note that these techniques are also applicable to realizing evolution under other two-body operators, such as the generator of unitary coupled cluster. Note that one can create variational algorithms where a variational parameter specifies the rank at which to truncate the $\\lambda_\\ell$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example implementation: Trotter steps of LiH in molecular orbital basis\n",
    "\n",
    "We will now use these techniques to implement Trotter steps for an actual molecule. We will focus on LiH at equilibrium geometry, since integrals for that system are provided with every OpenFermion installation. However, by installing [OpenFermion-PySCF](https://github.com/quantumlib/OpenFermion-PySCF) or [OpenFermion-Psi4](https://github.com/quantumlib/OpenFermion-Psi4) one can use these techniques for any molecule at any geometry. We will generate LiH in an active space consisting of 4 qubits. First, we obtain the Hamiltonian as an InteractionOperator."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-6.7698132180879735 [] +\n",
      "-0.7952726864779313 [0^ 0] +\n",
      "0.24889540266275176 [0^ 1^ 1 0] +\n",
      "-0.02307282640154995 [0^ 1^ 1 2] +\n",
      "-0.023072826401549944 [0^ 1^ 3 0] +\n",
      "0.005865992881900444 [0^ 1^ 3 2] +\n",
      "0.04614563473199314 [0^ 2] +\n",
      "0.005865992881900456 [0^ 2^ 0 2] +\n",
      "0.11412688446849813 [0^ 2^ 2 0] +\n",
      "-0.02307282640154995 [0^ 3^ 1 0] +\n",
      "0.005865992881900456 [0^ 3^ 1 2] +\n",
      "0.11412688446849813 [0^ 3^ 3 0] +\n",
      "0.0027487522157917266 [0^ 3^ 3 2] +\n",
      "0.24889540266275176 [1^ 0^ 0 1] +\n",
      "-0.02307282640154995 [1^ 0^ 0 3] +\n",
      "-0.023072826401549944 [1^ 0^ 2 1] +\n",
      "0.005865992881900444 [1^ 0^ 2 3] +\n",
      "-0.7952726864779313 [1^ 1] +\n",
      "-0.02307282640154995 [1^ 2^ 0 1] +\n",
      "0.005865992881900456 [1^ 2^ 0 3] +\n",
      "0.11412688446849813 [1^ 2^ 2 1] +\n",
      "0.0027487522157917266 [1^ 2^ 2 3] +\n",
      "0.04614563473199314 [1^ 3] +\n",
      "0.005865992881900456 [1^ 3^ 1 3] +\n",
      "0.11412688446849813 [1^ 3^ 3 1] +\n",
      "0.04614563473199324 [2^ 0] +\n",
      "0.11412688446849814 [2^ 0^ 0 2] +\n",
      "0.005865992881900458 [2^ 0^ 2 0] +\n",
      "-0.023072826401549958 [2^ 1^ 1 0] +\n",
      "0.11412688446849814 [2^ 1^ 1 2] +\n",
      "0.005865992881900458 [2^ 1^ 3 0] +\n",
      "0.002748752215791747 [2^ 1^ 3 2] +\n",
      "-0.36549257026798354 [2^ 2] +\n",
      "0.0058659928819004585 [2^ 3^ 1 0] +\n",
      "0.002748752215791731 [2^ 3^ 1 2] +\n",
      "0.002748752215791736 [2^ 3^ 3 0] +\n",
      "0.16959219087341962 [2^ 3^ 3 2] +\n",
      "-0.023072826401549958 [3^ 0^ 0 1] +\n",
      "0.11412688446849814 [3^ 0^ 0 3] +\n",
      "0.005865992881900458 [3^ 0^ 2 1] +\n",
      "0.002748752215791747 [3^ 0^ 2 3] +\n",
      "0.04614563473199324 [3^ 1] +\n",
      "0.11412688446849814 [3^ 1^ 1 3] +\n",
      "0.005865992881900458 [3^ 1^ 3 1] +\n",
      "0.0058659928819004585 [3^ 2^ 0 1] +\n",
      "0.002748752215791731 [3^ 2^ 0 3] +\n",
      "0.002748752215791736 [3^ 2^ 2 1] +\n",
      "0.16959219087341962 [3^ 2^ 2 3] +\n",
      "-0.36549257026798354 [3^ 3]\n"
     ]
    }
   ],
   "source": [
    "import openfermion\n",
    "\n",
    "# Set Hamiltonian parameters for LiH simulation in active space.\n",
    "diatomic_bond_length = 1.45\n",
    "geometry = [('Li', (0., 0., 0.)), ('H', (0., 0., diatomic_bond_length))]\n",
    "basis = 'sto-3g'\n",
    "multiplicity = 1\n",
    "active_space_start = 1\n",
    "active_space_stop = 3\n",
    "\n",
    "# Generate and populate instance of MolecularData.\n",
    "molecule = openfermion.MolecularData(geometry, basis, multiplicity, description=\"1.45\")\n",
    "molecule.load()\n",
    "\n",
    "# Get the Hamiltonian in an active space.\n",
    "molecular_hamiltonian = molecule.get_molecular_hamiltonian(\n",
    "    occupied_indices=range(active_space_start),\n",
    "    active_indices=range(active_space_start, active_space_stop))\n",
    "print(openfermion.get_fermion_operator(molecular_hamiltonian))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We see from the above output that this is a fairly complex Hamiltonian already. Next we will use the `simulate_trotter` function from Tutorial I, but this time using a different type of Trotter step associated with these low rank techniques. To keep this circuit very short for pedagogical purposes we will force a truncation of the eigenvalues $\\lambda_\\ell$ at a predetermined value of `final_rank`. While we also support a canned `LOW_RANK` option for the Trotter steps, in order to pass this value of `final_rank` we will instantiate a custom Trotter algorithm type."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0          1           2           3\n",
      "│          │           │           │\n",
      "×ᶠ─────────×ᶠ          ×ᶠ──────────×ᶠ\n",
      "│          │           │           │\n",
      "│          ×ᶠ──────────×ᶠ          │\n",
      "│          │           │           │\n",
      "XXYY───────XXYY^0.0229 XXYY────────XXYY^0.0229\n",
      "│          │           │           │\n",
      "×ᶠ─────────×ᶠ          ×ᶠ──────────×ᶠ\n",
      "│          │           │           │\n",
      "Z^0.054    │           │           Z^0.178\n",
      "│          │           │           │\n",
      "│          ×ᶠ──────────×ᶠ          │\n",
      "│          │           │           │\n",
      "│          Z^0.054     Z^0.178     │\n",
      "│          │           │           │\n",
      "│          #2──────────YXXY        │\n",
      "│          │           │           │\n",
      "#2─────────YXXY^0.14   │           │\n",
      "│          │           │           │\n",
      "│          Z           #2──────────YXXY^-0.14\n",
      "│          │           │           │\n",
      "@──────────@^-0.034    │           │\n",
      "│          │           │           │\n",
      "×──────────×           @───────────@^-0.034\n",
      "│          │           │           │\n",
      "│          │           ×───────────×\n",
      "│          │           │           │\n",
      "│          @───────────@^-0.034    │\n",
      "│          │           │           │\n",
      "│          ×───────────×           │\n",
      "│          │           │           │\n",
      "@──────────@^-0.0416   @───────────@^-0.0278\n",
      "│          │           │           │\n",
      "×──────────×           ×───────────×\n",
      "│          │           │           │\n",
      "Z^-0.0208  @───────────@^-0.034    Z^-0.0139\n",
      "│          │           │           │\n",
      "│          ×───────────×           │\n",
      "│          │           │           │\n",
      "│          Z^-0.0139   Z^-0.0208   │\n",
      "│          │           │           │\n",
      "│          │           Z           │\n",
      "│          │           │           │\n",
      "YXXY───────#2^0.14     YXXY────────#2^-0.14\n",
      "│          │           │           │\n",
      "│          YXXY────────#2^-1       │\n",
      "│          │           │           │\n",
      "│          │           YXXY────────#2^-0.483\n",
      "│          │           │           │\n",
      "│          YXXY────────#2^0.156    │\n",
      "│          │           │           │\n",
      "YXXY───────#2^-0.492   │           │\n",
      "│          │           │           │\n",
      "│          │           YXXY────────#2^0.492\n",
      "│          │           │           │\n",
      "│          YXXY────────#2^-0.156   │\n",
      "│          │           │           │\n",
      "@──────────@^-0.0409   │           │\n",
      "│          │           │           │\n",
      "×──────────×           YXXY────────#2^-0.483\n",
      "│          │           │           │\n",
      "│          │           @───────────@^-2.99e-05\n",
      "│          │           │           │\n",
      "│          │           ×───────────×\n",
      "│          │           │           │\n",
      "│          @───────────@^-0.0011   │\n",
      "│          │           │           │\n",
      "│          ×───────────×           │\n",
      "│          │           │           │\n",
      "@──────────@^0.0011    @───────────@^0.0011\n",
      "│          │           │           │\n",
      "×──────────×           ×───────────×\n",
      "│          │           │           │\n",
      "Z^1.49e-05 @───────────@^-0.0011   Z^0.0204\n",
      "│          │           │           │\n",
      "│          ×───────────×           │\n",
      "│          │           │           │\n",
      "│          Z^1.49e-05  Z^0.0204    │\n",
      "│          │           │           │\n",
      "#2─────────YXXY^0.483  │           │\n",
      "│          │           │           │\n",
      "│          #2──────────YXXY^0.156  │\n",
      "│          │           │           │\n",
      "│          │           #2──────────YXXY^0.492\n",
      "│          │           │           │\n",
      "#2─────────YXXY^-0.492 │           │\n",
      "│          │           │           │\n",
      "│          #2──────────YXXY^-0.156 │\n",
      "│          │           │           │\n",
      "#2─────────YXXY^0.483  │           │\n",
      "│          │           │           │\n",
      "\n"
     ]
    }
   ],
   "source": [
    "import cirq\n",
    "import openfermioncirq\n",
    "from openfermioncirq import trotter\n",
    "\n",
    "# Trotter step parameters.\n",
    "time = 1.\n",
    "final_rank = 2\n",
    "\n",
    "# Initialize circuit qubits in a line.\n",
    "n_qubits = openfermion.count_qubits(molecular_hamiltonian)\n",
    "qubits = cirq.LineQubit.range(n_qubits)\n",
    "\n",
    "# Compile the low rank Trotter step using OpenFermion-Cirq.\n",
    "custom_algorithm = trotter.LowRankTrotterAlgorithm(final_rank=final_rank)\n",
    "circuit = cirq.Circuit.from_ops(\n",
    "    trotter.simulate_trotter(\n",
    "            qubits, molecular_hamiltonian,\n",
    "            time=time, omit_final_swaps=True,\n",
    "            algorithm=custom_algorithm),\n",
    "    strategy=cirq.InsertStrategy.EARLIEST)\n",
    "\n",
    "# Print circuit.\n",
    "cirq.DropNegligible().optimize_circuit(circuit)\n",
    "print(circuit.to_text_diagram(transpose=True))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We were able to print out the circuit this way but forcing `final_rank` of 2 is not very accurate. In the cell below, we compile the Trotter step with full rank so $L = N^2$ and depth is actually $O(N^3)$ and repeat the Trotter step multiple times to show that it actually converges to the correct result. Since we are not forcing the rank truncation we can use the built-in `LOW_RANK` Trotter step type. Note that the rank of the Coulomb operators is asymptotically $O(N)$ but for very small molecules in small basis sets only a few eigenvalues can be truncated."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fidelity with exact result is 0.999988756990234.\n",
      "\n",
      "0          1            2            3\n",
      "│          │            │            │\n",
      "×ᶠ─────────×ᶠ           ×ᶠ───────────×ᶠ\n",
      "│          │            │            │\n",
      "│          ×ᶠ───────────×ᶠ           │\n",
      "│          │            │            │\n",
      "XXYY───────XXYY^0.00764 XXYY─────────XXYY^0.00764\n",
      "│          │            │            │\n",
      "×ᶠ─────────×ᶠ           ×ᶠ───────────×ᶠ\n",
      "│          │            │            │\n",
      "Z^0.018    │            │            Z^0.0594\n",
      "│          │            │            │\n",
      "│          ×ᶠ───────────×ᶠ           │\n",
      "│          │            │            │\n",
      "│          Z^0.018      Z^0.0594     │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY         │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.14    │            │\n",
      "│          │            │            │\n",
      "│          Z            #2───────────YXXY^-0.14\n",
      "│          │            │            │\n",
      "@──────────@^-0.0113    │            │\n",
      "│          │            │            │\n",
      "×──────────×            @────────────@^-0.0113\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.0113    │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.0139    @────────────@^-0.00927\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^-0.00693 @────────────@^-0.0113    Z^-0.00464\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^-0.00464   Z^-0.00693   │\n",
      "│          │            │            │\n",
      "│          │            Z            │\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.14      YXXY─────────#2^-0.14\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-1        │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^-0.483\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.156     │\n",
      "│          │            │            │\n",
      "YXXY───────#2^-0.492    │            │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.492\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-0.156    │\n",
      "│          │            │            │\n",
      "@──────────@^-0.0136    │            │\n",
      "│          │            │            │\n",
      "×──────────×            YXXY─────────#2^-0.483\n",
      "│          │            │            │\n",
      "│          │            @────────────@^-9.96e-06\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.000368  │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.000368   @────────────@^0.000368\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^4.98e-06 @────────────@^-0.000368  Z^0.00681\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^4.98e-06   Z^0.00681    │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.5     #2───────────YXXY^0.5\n",
      "│          │            │            │\n",
      "@──────────@^-9.96e-06  @────────────@^-0.0136\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.000368  │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.000368   @────────────@^0.000368\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00681  @────────────@^-0.000368  Z^4.98e-06\n",
      "│          │            │            │\n",
      "Z^0.00873  ×────────────×            Z^0.00873\n",
      "│          │            │            │\n",
      "│          Z^0.00681    Z^4.98e-06   │\n",
      "│          │            │            │\n",
      "│          Z^0.509      Z^-0.491     │\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.5       YXXY─────────#2^0.5\n",
      "│          │            │            │\n",
      "│          Z^0.983      │            Z^-0.0175\n",
      "│          │            │            │\n",
      "@──────────@^-0.0136    @────────────@^-9.96e-06\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.000368  │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.000368   @────────────@^0.000368\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^4.98e-06 @────────────@^-0.000368  Z^0.00681\n",
      "│          │            │            │\n",
      "Z^-0.501   ×────────────×            Z^0.000862\n",
      "│          │            │            │\n",
      "│          Z^4.98e-06   Z^0.00681    │\n",
      "│          │            │            │\n",
      "│          Z^0.501      Z^-0.000862  │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.5     │            │\n",
      "│          │            │            │\n",
      "Z^0.5      #2───────────YXXY^0.64    │\n",
      "│          │            │            │\n",
      "│          │            #2───────────YXXY^0.687\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.593   │\n",
      "│          │            │            │\n",
      "│          Z^-0.5       @────────────@^-0.0029\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.535   ×────────────×\n",
      "│          │            │            │\n",
      "@──────────@^-0.0029    │            │\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^0.0029     │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00357   @────────────@^-0.00236\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00179  @────────────@^0.0029     Z^0.00118\n",
      "│          │            │            │\n",
      "Z          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^0.00118    Z^0.00179    │\n",
      "│          │            │            │\n",
      "│          Z            Z            │\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-1        │\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.5       │            │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^-0.5\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-1        │\n",
      "│          │            │            │\n",
      "@──────────@^0.0029     │            │\n",
      "│          │            │            │\n",
      "×──────────×            @────────────@^0.0029\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.0029    │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00236   @────────────@^-0.00357\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00118  @────────────@^-0.0029    Z^0.00179\n",
      "│          │            │            │\n",
      "Z^-0.749   ×────────────×            Z^0.749\n",
      "│          │            │            │\n",
      "│          Z^0.00179    Z^0.00118    │\n",
      "│          │            │            │\n",
      "│          Z^0.249      Z^-0.249     │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY         │\n",
      "│          │            │            │\n",
      "│          Z            #2───────────YXXY^0.5\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.5     Z^-0.498     │\n",
      "│          │            │            │\n",
      "Z^-0.502   #2───────────YXXY         │\n",
      "│          │            │            │\n",
      "│          Z            @────────────@^0.0029\n",
      "│          │            │            │\n",
      "@──────────@^0.0029     ×────────────×\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.0029    │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00357   @────────────@^-0.00236\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00179  @────────────@^-0.0029    Z^0.00118\n",
      "│          │            │            │\n",
      "│          ×────────────×            Z^1.0\n",
      "│          │            │            │\n",
      "│          Z^0.00118    Z^0.00179    │\n",
      "│          │            │            │\n",
      "│          Z^-1.0       │            │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.426\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.646     Z^-0.5\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.626     Z^-0.5       │\n",
      "│          │            │            │\n",
      "│          Z^0.5        YXXY─────────#2^0.748\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.536     Z^-0.5\n",
      "│          │            │            │\n",
      "│          │            Z^-0.5       │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.5\n",
      "│          │            │            │\n",
      "│          │            │            Z^0.5\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^-0.0797\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-0.896    │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.0635\n",
      "│          │            │            │\n",
      "YXXY───────#2^-0.421    │            │\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-0.122    │\n",
      "│          │            │            │\n",
      "│          Z            YXXY─────────#2^0.352\n",
      "│          │            │            │\n",
      "@──────────@^-0.00276   │            │\n",
      "│          │            │            │\n",
      "×──────────×            @────────────@^-0.00276\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.00276   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.00267    @────────────@^0.00285\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00133  @────────────@^-0.00276   Z^0.00143\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^0.00143    Z^0.00133    │\n",
      "│          │            │            │\n",
      "│          │            Z            │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.352  │            │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.122   │\n",
      "│          │            │            │\n",
      "│          │            #2───────────YXXY^0.421\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.0635 │            Z^-0.5\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.896   │\n",
      "│          │            │            │\n",
      "│          │            Z^0.5        │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.0797  │            │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.441  │            │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.638   │\n",
      "│          │            │            │\n",
      "│          Z^1.0        #2───────────YXXY^0.634\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.634   │            │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.638   │\n",
      "│          │            │            │\n",
      "│          Z^1.0        @────────────@^0.00287\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.441   ×────────────×\n",
      "│          │            │            │\n",
      "@──────────@^0.00287    │            │\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.00287   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00299   @────────────@^-0.00275\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00149  @────────────@^-0.00287   Z^0.00138\n",
      "│          │            │            │\n",
      "Z^0.5      ×────────────×            Z^0.5\n",
      "│          │            │            │\n",
      "│          Z^0.00138    Z^0.00149    │\n",
      "│          │            │            │\n",
      "│          Z^-0.5       Z^0.5        │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2           Z\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.498     Z            │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.498\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2           Z^-1.0\n",
      "│          │            │            │\n",
      "@──────────@^0.0025     Z            │\n",
      "│          │            │            │\n",
      "×──────────×            YXXY─────────#2\n",
      "│          │            │            │\n",
      "│          │            │            Z\n",
      "│          │            │            │\n",
      "│          │            @────────────@^0.0025\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.0025    │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00429   @────────────@^-0.00145\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00215  @────────────@^-0.0025    Z^0.000725\n",
      "│          │            │            │\n",
      "Z^0.522    ×────────────×            Z^-0.478\n",
      "│          │            │            │\n",
      "│          Z^0.000725   Z^0.00215    │\n",
      "│          │            │            │\n",
      "│          Z^0.478      Z^-0.522     │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.0571  │            │\n",
      "│          │            │            │\n",
      "Z^0.5      #2───────────YXXY^0.943   │\n",
      "│          │            │            │\n",
      "│          Z^0.5        #2───────────YXXY^0.503\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.995   Z^-0.5       │\n",
      "│          │            │            │\n",
      "Z^0.5      #2───────────YXXY^0.0805  │\n",
      "│          │            │            │\n",
      "│          Z^0.5        @────────────@^-0.000338\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.5     ×────────────×\n",
      "│          │            │            │\n",
      "Z^-0.5     │            │            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.000338  │            │\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^0.000338   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00899   @────────────@^-1.27e-05\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.0045   @────────────@^0.000338   Z^6.37e-06\n",
      "│          │            │            │\n",
      "Z          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^6.37e-06   Z^0.0045     │\n",
      "│          │            │            │\n",
      "│          Z            Z            │\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-1        │\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.5       │            │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.5\n",
      "│          │            │            │\n",
      "@──────────@^-0.00899   │            │\n",
      "│          │            │            │\n",
      "×──────────×            @────────────@^-1.27e-05\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^0.000338   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.000338  @────────────@^-0.000338\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^6.37e-06 @────────────@^0.000338   Z^0.0045\n",
      "│          │            │            │\n",
      "Z^-0.25    ×────────────×            Z^0.75\n",
      "│          │            │            │\n",
      "│          Z^6.37e-06   Z^0.0045     │\n",
      "│          │            │            │\n",
      "│          Z^0.25       Z^0.25       │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.5     #2───────────YXXY^0.5\n",
      "│          │            │            │\n",
      "Z^6.45e-05 │            Z^-0.5       │\n",
      "│          │            │            │\n",
      "@──────────@^-1.27e-05  @────────────@^-0.00899\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^0.000338   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.000338  @────────────@^-0.000338\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.0045   @────────────@^0.000338   Z^6.37e-06\n",
      "│          │            │            │\n",
      "Z^-0.02    ×────────────×            Z^0.563\n",
      "│          │            │            │\n",
      "│          Z^0.0045     Z^6.37e-06   │\n",
      "│          │            │            │\n",
      "│          Z^0.0632     Z^0.98       │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.5\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.608     Z^0.5\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.667     Z^0.957      │\n",
      "│          │            │            │\n",
      "│          Z^0.957      │            │\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.608     │\n",
      "│          │            │            │\n",
      "@──────────@^-0.0043    Z^0.543      │\n",
      "│          │            │            │\n",
      "×──────────×            YXXY─────────#2^0.5\n",
      "│          │            │            │\n",
      "│          │            │            Z^0.957\n",
      "│          │            │            │\n",
      "│          │            @────────────@^-0.00145\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.00249   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.00249    @────────────@^0.00249\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.000723 @────────────@^-0.00249   Z^0.00215\n",
      "│          │            │            │\n",
      "Z^-0.5     ×────────────×            Z^-0.5\n",
      "│          │            │            │\n",
      "│          Z^0.000723   Z^0.00215    │\n",
      "│          │            │            │\n",
      "│          S            Z^0.5        │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.5     │            │\n",
      "│          │            │            │\n",
      "S          #2───────────YXXY^0.117   │\n",
      "│          │            │            │\n",
      "│          Z^-1.0       #2───────────YXXY^0.505\n",
      "│          │            │            │\n",
      "│          │            Z^1.0        │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.918   │\n",
      "│          │            │            │\n",
      "│          Z^-0.5       │            │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.0832 │            │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.938   │            │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.938   │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.941   │            │\n",
      "│          │            │            │\n",
      "│          │            #2───────────YXXY^-0.503\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.0803  │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.436  │            │\n",
      "│          │            │            │\n",
      "│          Z            @────────────@^-0.00287\n",
      "│          │            │            │\n",
      "@──────────@^-0.00287   ×────────────×\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.00287   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.00287    @────────────@^0.00287\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00144  @────────────@^-0.00287   Z^0.00144\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^0.00144    Z^0.00144    │\n",
      "│          │            │            │\n",
      "│          │            Z            │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.436\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-0.0803   │\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.503     │            │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^-0.941\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-0.938    │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^-0.938\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2           │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.0853\n",
      "│          │            │            │\n",
      "YXXY───────#2^-0.0853   Z            │\n",
      "│          │            │            │\n",
      "│          │            @────────────@^-0.000263\n",
      "│          │            │            │\n",
      "@──────────@^-0.000263  ×────────────×\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.000263  │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.000321   @────────────@^0.000216\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00016  @────────────@^-0.000263  Z^0.000108\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^0.000108   Z^0.00016    │\n",
      "│          │            │            │\n",
      "│          Z            │            │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.0853 #2───────────YXXY^0.0853\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^-1      │\n",
      "│          │            │            │\n",
      "│          │            ×ᶠ───────────×ᶠ\n",
      "│          │            │            │\n",
      "×ᶠ─────────×ᶠ           │            │\n",
      "│          │            │            │\n",
      "│          ×ᶠ───────────×ᶠ           │\n",
      "│          │            │            │\n",
      "XXYY───────XXYY^0.00764 XXYY─────────XXYY^0.00764\n",
      "│          │            │            │\n",
      "×ᶠ─────────×ᶠ           ×ᶠ───────────×ᶠ\n",
      "│          │            │            │\n",
      "Z^0.0594   │            │            Z^0.018\n",
      "│          │            │            │\n",
      "│          ×ᶠ───────────×ᶠ           │\n",
      "│          │            │            │\n",
      "│          Z^0.0594     Z^0.018      │\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2           │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.14\n",
      "│          │            │            │\n",
      "YXXY───────#2^-0.14     Z            │\n",
      "│          │            │            │\n",
      "│          │            @────────────@^-0.0113\n",
      "│          │            │            │\n",
      "@──────────@^-0.0113    ×────────────×\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.0113    │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00927   @────────────@^-0.0139\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^-0.00464 @────────────@^-0.0113    Z^-0.00693\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^-0.00693   Z^-0.00464   │\n",
      "│          │            │            │\n",
      "│          Z            │            │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.14   #2───────────YXXY^0.14\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^-1      │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.483  │            │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.156   │\n",
      "│          │            │            │\n",
      "│          │            #2───────────YXXY^-0.492\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.492   │            │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^-0.156  │\n",
      "│          │            │            │\n",
      "│          │            @────────────@^-0.0136\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.483  ×────────────×\n",
      "│          │            │            │\n",
      "@──────────@^-9.96e-06  │            │\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.000368  │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.000368   @────────────@^0.000368\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00681  @────────────@^-0.000368  Z^4.98e-06\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^0.00681    Z^4.98e-06   │\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.5       YXXY─────────#2^0.5\n",
      "│          │            │            │\n",
      "@──────────@^-0.0136    @────────────@^-9.96e-06\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.000368  │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.000368   @────────────@^0.000368\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^4.98e-06 @────────────@^-0.000368  Z^0.00681\n",
      "│          │            │            │\n",
      "Z^0.00873  ×────────────×            Z^0.00873\n",
      "│          │            │            │\n",
      "│          Z^4.98e-06   Z^0.00681    │\n",
      "│          │            │            │\n",
      "│          Z^-0.491     Z^0.509      │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.5     #2───────────YXXY^0.5\n",
      "│          │            │            │\n",
      "Z^-0.0175  │            Z^0.983      │\n",
      "│          │            │            │\n",
      "@──────────@^-9.96e-06  @────────────@^-0.0136\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.000368  │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.000368   @────────────@^0.000368\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00681  @────────────@^-0.000368  Z^4.98e-06\n",
      "│          │            │            │\n",
      "Z^0.000862 ×────────────×            Z^-0.501\n",
      "│          │            │            │\n",
      "│          Z^0.00681    Z^4.98e-06   │\n",
      "│          │            │            │\n",
      "│          Z^-0.000862  Z^0.501      │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.5\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.64      Z^0.5\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.687     │            │\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.593     │\n",
      "│          │            │            │\n",
      "@──────────@^-0.0029    Z^-0.5       │\n",
      "│          │            │            │\n",
      "×──────────×            YXXY─────────#2^0.535\n",
      "│          │            │            │\n",
      "│          │            @────────────@^-0.0029\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^0.0029     │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00236   @────────────@^-0.00357\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00118  @────────────@^0.0029     Z^0.00179\n",
      "│          │            │            │\n",
      "│          ×────────────×            Z\n",
      "│          │            │            │\n",
      "│          Z^0.00179    Z^0.00118    │\n",
      "│          │            │            │\n",
      "│          Z            Z            │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^-1      │\n",
      "│          │            │            │\n",
      "│          │            #2───────────YXXY^0.5\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.5    │            │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^-1      │\n",
      "│          │            │            │\n",
      "│          │            @────────────@^0.0029\n",
      "│          │            │            │\n",
      "@──────────@^0.0029     ×────────────×\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.0029    │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00357   @────────────@^-0.00236\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00179  @────────────@^-0.0029    Z^0.00118\n",
      "│          │            │            │\n",
      "Z^0.749    ×────────────×            Z^-0.749\n",
      "│          │            │            │\n",
      "│          Z^0.00118    Z^0.00179    │\n",
      "│          │            │            │\n",
      "│          Z^-0.249     Z^0.249      │\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2           │\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.5       Z            │\n",
      "│          │            │            │\n",
      "│          Z^-0.498     YXXY─────────#2^0.5\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2           Z^-0.502\n",
      "│          │            │            │\n",
      "@──────────@^0.0029     Z            │\n",
      "│          │            │            │\n",
      "×──────────×            @────────────@^0.0029\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.0029    │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00236   @────────────@^-0.00357\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00118  @────────────@^-0.0029    Z^0.00179\n",
      "│          │            │            │\n",
      "Z^1.0      ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^0.00179    Z^0.00118    │\n",
      "│          │            │            │\n",
      "│          │            Z^-1.0       │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.426   │            │\n",
      "│          │            │            │\n",
      "Z^-0.5     #2───────────YXXY^0.646   │\n",
      "│          │            │            │\n",
      "│          Z^-0.5       #2───────────YXXY^0.626\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.748   Z^0.5        │\n",
      "│          │            │            │\n",
      "Z^-0.5     #2───────────YXXY^0.536   │\n",
      "│          │            │            │\n",
      "│          Z^-0.5       │            │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.5     │            │\n",
      "│          │            │            │\n",
      "Z^0.5      │            │            │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.0797 │            │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^-0.896  │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.0635  │            │\n",
      "│          │            │            │\n",
      "│          │            #2───────────YXXY^-0.421\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^-0.122  │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.352   Z            │\n",
      "│          │            │            │\n",
      "│          │            @────────────@^-0.00276\n",
      "│          │            │            │\n",
      "@──────────@^-0.00276   ×────────────×\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.00276   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.00285    @────────────@^0.00267\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00143  @────────────@^-0.00276   Z^0.00133\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^0.00133    Z^0.00143    │\n",
      "│          │            │            │\n",
      "│          Z            │            │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^-0.352\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.122     │\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.421     │            │\n",
      "│          │            │            │\n",
      "Z^-0.5     │            YXXY─────────#2^-0.0635\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.896     │\n",
      "│          │            │            │\n",
      "│          Z^0.5        │            │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.0797\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^-0.441\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.638     │\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.634     Z^1.0        │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.634\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.638     │\n",
      "│          │            │            │\n",
      "@──────────@^0.00287    Z^1.0        │\n",
      "│          │            │            │\n",
      "×──────────×            YXXY─────────#2^0.441\n",
      "│          │            │            │\n",
      "│          │            @────────────@^0.00287\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.00287   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00275   @────────────@^-0.00299\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00138  @────────────@^-0.00287   Z^0.00149\n",
      "│          │            │            │\n",
      "Z^0.5      ×────────────×            Z^0.5\n",
      "│          │            │            │\n",
      "│          Z^0.00149    Z^0.00138    │\n",
      "│          │            │            │\n",
      "│          Z^0.5        Z^-0.5       │\n",
      "│          │            │            │\n",
      "#2─────────YXXY         │            │\n",
      "│          │            │            │\n",
      "Z          #2───────────YXXY         │\n",
      "│          │            │            │\n",
      "│          Z            #2───────────YXXY^0.498\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.498   │            │\n",
      "│          │            │            │\n",
      "Z^-1.0     #2───────────YXXY         │\n",
      "│          │            │            │\n",
      "│          Z            @────────────@^0.0025\n",
      "│          │            │            │\n",
      "#2─────────YXXY         ×────────────×\n",
      "│          │            │            │\n",
      "Z          │            │            │\n",
      "│          │            │            │\n",
      "@──────────@^0.0025     │            │\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.0025    │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00145   @────────────@^-0.00429\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.000725 @────────────@^-0.0025    Z^0.00215\n",
      "│          │            │            │\n",
      "Z^-0.478   ×────────────×            Z^0.522\n",
      "│          │            │            │\n",
      "│          Z^0.00215    Z^0.000725   │\n",
      "│          │            │            │\n",
      "│          Z^-0.522     Z^0.478      │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.0571\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.943     Z^0.5\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.503     Z^0.5        │\n",
      "│          │            │            │\n",
      "│          Z^-0.5       YXXY─────────#2^0.995\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.0805    Z^0.5\n",
      "│          │            │            │\n",
      "@──────────@^-0.000338  Z^0.5        │\n",
      "│          │            │            │\n",
      "×──────────×            YXXY─────────#2^0.5\n",
      "│          │            │            │\n",
      "│          │            │            Z^-0.5\n",
      "│          │            │            │\n",
      "│          │            @────────────@^-0.000338\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^0.000338   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-1.27e-05  @────────────@^-0.00899\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^6.37e-06 @────────────@^0.000338   Z^0.0045\n",
      "│          │            │            │\n",
      "│          ×────────────×            Z\n",
      "│          │            │            │\n",
      "│          Z^0.0045     Z^6.37e-06   │\n",
      "│          │            │            │\n",
      "│          Z            Z            │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^-1      │\n",
      "│          │            │            │\n",
      "│          │            #2───────────YXXY^0.5\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.5     │            │\n",
      "│          │            │            │\n",
      "│          │            @────────────@^-0.00899\n",
      "│          │            │            │\n",
      "@──────────@^-1.27e-05  ×────────────×\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^0.000338   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.000338  @────────────@^-0.000338\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.0045   @────────────@^0.000338   Z^6.37e-06\n",
      "│          │            │            │\n",
      "Z^0.75     ×────────────×            Z^-0.25\n",
      "│          │            │            │\n",
      "│          Z^0.0045     Z^6.37e-06   │\n",
      "│          │            │            │\n",
      "│          Z^0.25       Z^0.25       │\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.5       YXXY─────────#2^0.5\n",
      "│          │            │            │\n",
      "│          Z^-0.5       │            Z^6.45e-05\n",
      "│          │            │            │\n",
      "@──────────@^-0.00899   @────────────@^-1.27e-05\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^0.000338   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.000338  @────────────@^-0.000338\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^6.37e-06 @────────────@^0.000338   Z^0.0045\n",
      "│          │            │            │\n",
      "Z^0.563    ×────────────×            Z^-0.02\n",
      "│          │            │            │\n",
      "│          Z^6.37e-06   Z^0.0045     │\n",
      "│          │            │            │\n",
      "│          Z^0.98       Z^0.0632     │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.5     │            │\n",
      "│          │            │            │\n",
      "Z^0.5      #2───────────YXXY^0.608   │\n",
      "│          │            │            │\n",
      "│          Z^0.957      #2───────────YXXY^0.667\n",
      "│          │            │            │\n",
      "│          │            Z^0.957      │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.608   │\n",
      "│          │            │            │\n",
      "│          Z^0.543      @────────────@^-0.0043\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.5     ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.957    │            │            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00145   │            │\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.00249   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.00249    @────────────@^0.00249\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00215  @────────────@^-0.00249   Z^0.000723\n",
      "│          │            │            │\n",
      "Z^-0.5     ×────────────×            Z^-0.5\n",
      "│          │            │            │\n",
      "│          Z^0.00215    Z^0.000723   │\n",
      "│          │            │            │\n",
      "│          Z^0.5        S            │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.5\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.117     S\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.505     Z^-1.0       │\n",
      "│          │            │            │\n",
      "│          Z^1.0        │            │\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.918     │\n",
      "│          │            │            │\n",
      "│          │            Z^-0.5       │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^-0.0832\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.938\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.938     │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.941\n",
      "│          │            │            │\n",
      "YXXY───────#2^-0.503    │            │\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.0803    │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^-0.436\n",
      "│          │            │            │\n",
      "@──────────@^-0.00287   Z            │\n",
      "│          │            │            │\n",
      "×──────────×            @────────────@^-0.00287\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.00287   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.00287    @────────────@^0.00287\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00144  @────────────@^-0.00287   Z^0.00144\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^0.00144    Z^0.00144    │\n",
      "│          │            │            │\n",
      "│          Z            │            │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.436   │            │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^-0.0803 │\n",
      "│          │            │            │\n",
      "│          │            #2───────────YXXY^0.503\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.941  │            │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^-0.938  │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.938  │            │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY         │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.0853  │            │\n",
      "│          │            │            │\n",
      "│          Z            #2───────────YXXY^-0.0853\n",
      "│          │            │            │\n",
      "@──────────@^-0.000263  │            │\n",
      "│          │            │            │\n",
      "×──────────×            @────────────@^-0.000263\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.000263  │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.000216   @────────────@^0.000321\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.000108 @────────────@^-0.000263  Z^0.00016\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^0.00016    Z^0.000108   │\n",
      "│          │            │            │\n",
      "│          │            Z            │\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.0853    YXXY─────────#2^-0.0853\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-1        │\n",
      "│          │            │            │\n",
      "×ᶠ─────────×ᶠ           │            │\n",
      "│          │            │            │\n",
      "│          │            ×ᶠ───────────×ᶠ\n",
      "│          │            │            │\n",
      "│          ×ᶠ───────────×ᶠ           │\n",
      "│          │            │            │\n",
      "XXYY───────XXYY^0.00764 XXYY─────────XXYY^0.00764\n",
      "│          │            │            │\n",
      "×ᶠ─────────×ᶠ           ×ᶠ───────────×ᶠ\n",
      "│          │            │            │\n",
      "Z^0.018    │            │            Z^0.0594\n",
      "│          │            │            │\n",
      "│          ×ᶠ───────────×ᶠ           │\n",
      "│          │            │            │\n",
      "│          Z^0.018      Z^0.0594     │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY         │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.14    │            │\n",
      "│          │            │            │\n",
      "│          Z            #2───────────YXXY^-0.14\n",
      "│          │            │            │\n",
      "@──────────@^-0.0113    │            │\n",
      "│          │            │            │\n",
      "×──────────×            @────────────@^-0.0113\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.0113    │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.0139    @────────────@^-0.00927\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^-0.00693 @────────────@^-0.0113    Z^-0.00464\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^-0.00464   Z^-0.00693   │\n",
      "│          │            │            │\n",
      "│          │            Z            │\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.14      YXXY─────────#2^-0.14\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-1        │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^-0.483\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.156     │\n",
      "│          │            │            │\n",
      "YXXY───────#2^-0.492    │            │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.492\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-0.156    │\n",
      "│          │            │            │\n",
      "@──────────@^-0.0136    │            │\n",
      "│          │            │            │\n",
      "×──────────×            YXXY─────────#2^-0.483\n",
      "│          │            │            │\n",
      "│          │            @────────────@^-9.96e-06\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.000368  │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.000368   @────────────@^0.000368\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^4.98e-06 @────────────@^-0.000368  Z^0.00681\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^4.98e-06   Z^0.00681    │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.5     #2───────────YXXY^0.5\n",
      "│          │            │            │\n",
      "@──────────@^-9.96e-06  @────────────@^-0.0136\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.000368  │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.000368   @────────────@^0.000368\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00681  @────────────@^-0.000368  Z^4.98e-06\n",
      "│          │            │            │\n",
      "Z^0.00873  ×────────────×            Z^0.00873\n",
      "│          │            │            │\n",
      "│          Z^0.00681    Z^4.98e-06   │\n",
      "│          │            │            │\n",
      "│          Z^0.509      Z^-0.491     │\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.5       YXXY─────────#2^0.5\n",
      "│          │            │            │\n",
      "│          Z^0.983      │            Z^-0.0175\n",
      "│          │            │            │\n",
      "@──────────@^-0.0136    @────────────@^-9.96e-06\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.000368  │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.000368   @────────────@^0.000368\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^4.98e-06 @────────────@^-0.000368  Z^0.00681\n",
      "│          │            │            │\n",
      "Z^-0.501   ×────────────×            Z^0.000862\n",
      "│          │            │            │\n",
      "│          Z^4.98e-06   Z^0.00681    │\n",
      "│          │            │            │\n",
      "│          Z^0.501      Z^-0.000862  │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.5     │            │\n",
      "│          │            │            │\n",
      "Z^0.5      #2───────────YXXY^0.64    │\n",
      "│          │            │            │\n",
      "│          │            #2───────────YXXY^0.687\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.593   │\n",
      "│          │            │            │\n",
      "│          Z^-0.5       @────────────@^-0.0029\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.535   ×────────────×\n",
      "│          │            │            │\n",
      "@──────────@^-0.0029    │            │\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^0.0029     │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00357   @────────────@^-0.00236\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00179  @────────────@^0.0029     Z^0.00118\n",
      "│          │            │            │\n",
      "Z          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^0.00118    Z^0.00179    │\n",
      "│          │            │            │\n",
      "│          Z            Z            │\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-1        │\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.5       │            │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^-0.5\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-1        │\n",
      "│          │            │            │\n",
      "@──────────@^0.0029     │            │\n",
      "│          │            │            │\n",
      "×──────────×            @────────────@^0.0029\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.0029    │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00236   @────────────@^-0.00357\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00118  @────────────@^-0.0029    Z^0.00179\n",
      "│          │            │            │\n",
      "Z^-0.749   ×────────────×            Z^0.749\n",
      "│          │            │            │\n",
      "│          Z^0.00179    Z^0.00118    │\n",
      "│          │            │            │\n",
      "│          Z^0.249      Z^-0.249     │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY         │\n",
      "│          │            │            │\n",
      "│          Z            #2───────────YXXY^0.5\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.5     Z^-0.498     │\n",
      "│          │            │            │\n",
      "Z^-0.502   #2───────────YXXY         │\n",
      "│          │            │            │\n",
      "│          Z            @────────────@^0.0029\n",
      "│          │            │            │\n",
      "@──────────@^0.0029     ×────────────×\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.0029    │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00357   @────────────@^-0.00236\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00179  @────────────@^-0.0029    Z^0.00118\n",
      "│          │            │            │\n",
      "│          ×────────────×            Z^1.0\n",
      "│          │            │            │\n",
      "│          Z^0.00118    Z^0.00179    │\n",
      "│          │            │            │\n",
      "│          Z^-1.0       │            │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.426\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.646     Z^-0.5\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.626     Z^-0.5       │\n",
      "│          │            │            │\n",
      "│          Z^0.5        YXXY─────────#2^0.748\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.536     Z^-0.5\n",
      "│          │            │            │\n",
      "│          │            Z^-0.5       │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.5\n",
      "│          │            │            │\n",
      "│          │            │            Z^0.5\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^-0.0797\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-0.896    │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.0635\n",
      "│          │            │            │\n",
      "YXXY───────#2^-0.421    │            │\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-0.122    │\n",
      "│          │            │            │\n",
      "│          Z            YXXY─────────#2^0.352\n",
      "│          │            │            │\n",
      "@──────────@^-0.00276   │            │\n",
      "│          │            │            │\n",
      "×──────────×            @────────────@^-0.00276\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.00276   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.00267    @────────────@^0.00285\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00133  @────────────@^-0.00276   Z^0.00143\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^0.00143    Z^0.00133    │\n",
      "│          │            │            │\n",
      "│          │            Z            │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.352  │            │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.122   │\n",
      "│          │            │            │\n",
      "│          │            #2───────────YXXY^0.421\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.0635 │            Z^-0.5\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.896   │\n",
      "│          │            │            │\n",
      "│          │            Z^0.5        │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.0797  │            │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.441  │            │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.638   │\n",
      "│          │            │            │\n",
      "│          Z^1.0        #2───────────YXXY^0.634\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.634   │            │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.638   │\n",
      "│          │            │            │\n",
      "│          Z^1.0        @────────────@^0.00287\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.441   ×────────────×\n",
      "│          │            │            │\n",
      "@──────────@^0.00287    │            │\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.00287   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00299   @────────────@^-0.00275\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00149  @────────────@^-0.00287   Z^0.00138\n",
      "│          │            │            │\n",
      "Z^0.5      ×────────────×            Z^0.5\n",
      "│          │            │            │\n",
      "│          Z^0.00138    Z^0.00149    │\n",
      "│          │            │            │\n",
      "│          Z^-0.5       Z^0.5        │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2           Z\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.498     Z            │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.498\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2           Z^-1.0\n",
      "│          │            │            │\n",
      "@──────────@^0.0025     Z            │\n",
      "│          │            │            │\n",
      "×──────────×            YXXY─────────#2\n",
      "│          │            │            │\n",
      "│          │            │            Z\n",
      "│          │            │            │\n",
      "│          │            @────────────@^0.0025\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.0025    │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00429   @────────────@^-0.00145\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00215  @────────────@^-0.0025    Z^0.000725\n",
      "│          │            │            │\n",
      "Z^0.522    ×────────────×            Z^-0.478\n",
      "│          │            │            │\n",
      "│          Z^0.000725   Z^0.00215    │\n",
      "│          │            │            │\n",
      "│          Z^0.478      Z^-0.522     │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.0571  │            │\n",
      "│          │            │            │\n",
      "Z^0.5      #2───────────YXXY^0.943   │\n",
      "│          │            │            │\n",
      "│          Z^0.5        #2───────────YXXY^0.503\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.995   Z^-0.5       │\n",
      "│          │            │            │\n",
      "Z^0.5      #2───────────YXXY^0.0805  │\n",
      "│          │            │            │\n",
      "│          Z^0.5        @────────────@^-0.000338\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.5     ×────────────×\n",
      "│          │            │            │\n",
      "Z^-0.5     │            │            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.000338  │            │\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^0.000338   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.00899   @────────────@^-1.27e-05\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.0045   @────────────@^0.000338   Z^6.37e-06\n",
      "│          │            │            │\n",
      "Z          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^6.37e-06   Z^0.0045     │\n",
      "│          │            │            │\n",
      "│          Z            Z            │\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-1        │\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.5       │            │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.5\n",
      "│          │            │            │\n",
      "@──────────@^-0.00899   │            │\n",
      "│          │            │            │\n",
      "×──────────×            @────────────@^-1.27e-05\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^0.000338   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.000338  @────────────@^-0.000338\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^6.37e-06 @────────────@^0.000338   Z^0.0045\n",
      "│          │            │            │\n",
      "Z^-0.25    ×────────────×            Z^0.75\n",
      "│          │            │            │\n",
      "│          Z^6.37e-06   Z^0.0045     │\n",
      "│          │            │            │\n",
      "│          Z^0.25       Z^0.25       │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.5     #2───────────YXXY^0.5\n",
      "│          │            │            │\n",
      "Z^6.45e-05 │            Z^-0.5       │\n",
      "│          │            │            │\n",
      "@──────────@^-1.27e-05  @────────────@^-0.00899\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^0.000338   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^-0.000338  @────────────@^-0.000338\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.0045   @────────────@^0.000338   Z^6.37e-06\n",
      "│          │            │            │\n",
      "Z^-0.02    ×────────────×            Z^0.563\n",
      "│          │            │            │\n",
      "│          Z^0.0045     Z^6.37e-06   │\n",
      "│          │            │            │\n",
      "│          Z^0.0632     Z^0.98       │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.5\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.608     Z^0.5\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.667     Z^0.957      │\n",
      "│          │            │            │\n",
      "│          Z^0.957      │            │\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^0.608     │\n",
      "│          │            │            │\n",
      "@──────────@^-0.0043    Z^0.543      │\n",
      "│          │            │            │\n",
      "×──────────×            YXXY─────────#2^0.5\n",
      "│          │            │            │\n",
      "│          │            │            Z^0.957\n",
      "│          │            │            │\n",
      "│          │            @────────────@^-0.00145\n",
      "│          │            │            │\n",
      "│          │            ×────────────×\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.00249   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.00249    @────────────@^0.00249\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.000723 @────────────@^-0.00249   Z^0.00215\n",
      "│          │            │            │\n",
      "Z^-0.5     ×────────────×            Z^-0.5\n",
      "│          │            │            │\n",
      "│          Z^0.000723   Z^0.00215    │\n",
      "│          │            │            │\n",
      "│          S            Z^0.5        │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.5     │            │\n",
      "│          │            │            │\n",
      "S          #2───────────YXXY^0.117   │\n",
      "│          │            │            │\n",
      "│          Z^-1.0       #2───────────YXXY^0.505\n",
      "│          │            │            │\n",
      "│          │            Z^1.0        │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.918   │\n",
      "│          │            │            │\n",
      "│          Z^-0.5       │            │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.0832 │            │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.938   │            │\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.938   │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^0.941   │            │\n",
      "│          │            │            │\n",
      "│          │            #2───────────YXXY^-0.503\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^0.0803  │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.436  │            │\n",
      "│          │            │            │\n",
      "│          Z            @────────────@^-0.00287\n",
      "│          │            │            │\n",
      "@──────────@^-0.00287   ×────────────×\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.00287   │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.00287    @────────────@^0.00287\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00144  @────────────@^-0.00287   Z^0.00144\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^0.00144    Z^0.00144    │\n",
      "│          │            │            │\n",
      "│          │            Z            │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.436\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-0.0803   │\n",
      "│          │            │            │\n",
      "YXXY───────#2^0.503     │            │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^-0.941\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2^-0.938    │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^-0.938\n",
      "│          │            │            │\n",
      "│          YXXY─────────#2           │\n",
      "│          │            │            │\n",
      "│          │            YXXY─────────#2^0.0853\n",
      "│          │            │            │\n",
      "YXXY───────#2^-0.0853   Z            │\n",
      "│          │            │            │\n",
      "│          │            @────────────@^-0.000263\n",
      "│          │            │            │\n",
      "@──────────@^-0.000263  ×────────────×\n",
      "│          │            │            │\n",
      "×──────────×            │            │\n",
      "│          │            │            │\n",
      "│          @────────────@^-0.000263  │\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "@──────────@^0.000321   @────────────@^0.000216\n",
      "│          │            │            │\n",
      "×──────────×            ×────────────×\n",
      "│          │            │            │\n",
      "Z^0.00016  @────────────@^-0.000263  Z^0.000108\n",
      "│          │            │            │\n",
      "│          ×────────────×            │\n",
      "│          │            │            │\n",
      "│          Z^0.000108   Z^0.00016    │\n",
      "│          │            │            │\n",
      "│          Z            │            │\n",
      "│          │            │            │\n",
      "#2─────────YXXY^-0.0853 #2───────────YXXY^0.0853\n",
      "│          │            │            │\n",
      "│          #2───────────YXXY^-1      │\n",
      "│          │            │            │\n",
      "│          │            ×ᶠ───────────×ᶠ\n",
      "│          │            │            │\n",
      "×ᶠ─────────×ᶠ           │            │\n",
      "│          │            │            │\n",
      "│          ×ᶠ───────────×ᶠ           │\n",
      "│          │            │            │\n",
      "×ᶠ─────────×ᶠ           ×ᶠ───────────×ᶠ\n",
      "│          │            │            │\n",
      "│          ×ᶠ───────────×ᶠ           │\n",
      "│          │            │            │\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Initialize a random initial state.\n",
    "import numpy\n",
    "random_seed = 8317\n",
    "initial_state = openfermion.haar_random_vector(\n",
    "    2 ** n_qubits, random_seed).astype(numpy.complex64)\n",
    "\n",
    "# Numerically compute the correct circuit output.\n",
    "import scipy\n",
    "hamiltonian_sparse = openfermion.get_sparse_operator(molecular_hamiltonian)\n",
    "exact_state = scipy.sparse.linalg.expm_multiply(\n",
    "    -1j * time * hamiltonian_sparse, initial_state)\n",
    "\n",
    "# Trotter step paramaters.\n",
    "n_steps = 3\n",
    "\n",
    "# Compile the low rank Trotter step using OpenFermion-Cirq.\n",
    "qubits = cirq.LineQubit.range(n_qubits)\n",
    "circuit = cirq.Circuit.from_ops(\n",
    "    trotter.simulate_trotter(\n",
    "            qubits, molecular_hamiltonian,\n",
    "            time=time, n_steps=n_steps,\n",
    "            algorithm=trotter.LOW_RANK),\n",
    "    strategy=cirq.InsertStrategy.EARLIEST)\n",
    "\n",
    "# Use Cirq simulator to apply circuit.\n",
    "simulator = cirq.google.XmonSimulator()\n",
    "result = simulator.simulate(circuit, qubit_order=qubits, initial_state=initial_state)\n",
    "simulated_state = result.final_state\n",
    "\n",
    "# Print final fidelity.\n",
    "fidelity = abs(numpy.dot(simulated_state, numpy.conjugate(exact_state))) ** 2\n",
    "print('Fidelity with exact result is {}.\\n'.format(fidelity))\n",
    "\n",
    "# Print circuit.\n",
    "cirq.DropNegligible().optimize_circuit(circuit)\n",
    "print(circuit.to_text_diagram(transpose=True))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
